package com.zenithmind.task.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.task.pojo.entity.TaskTemplate;
import com.zenithmind.task.pojo.query.TaskTemplateQuery;
import com.zenithmind.task.pojo.vo.TaskTemplateVO;

import java.util.List;
import java.util.Map;

/**
 * 任务模板服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface TaskTemplateService extends IService<TaskTemplate> {

    /**
     * 分页查询任务模板列表
     *
     * @param query 查询条件
     * @param userId 当前用户ID
     * @return 分页结果
     */
    PageResult<TaskTemplateVO> getTaskTemplatePage(TaskTemplateQuery query, String userId);

    /**
     * 根据ID查询任务模板详情
     * 
     * @param id 模板ID
     * @param userId 当前用户ID
     * @return 模板详情
     */
    TaskTemplateVO getTaskTemplateById(String id, String userId);

    /**
     * 创建任务模板
     * 
     * @param taskTemplate 模板信息
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTaskTemplate(TaskTemplate taskTemplate, String userId);

    /**
     * 更新任务模板
     * 
     * @param taskTemplate 模板信息
     * @param userId 操作者ID
     * @return 更新结果
     */
    Boolean updateTaskTemplate(TaskTemplate taskTemplate, String userId);

    /**
     * 删除任务模板
     * 
     * @param id 模板ID
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean deleteTaskTemplate(String id, String userId);

    /**
     * 批量删除任务模板
     * 
     * @param ids 模板ID列表
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean batchDeleteTaskTemplates(List<String> ids, String userId);

    /**
     * 从任务创建模板
     * 
     * @param taskId 任务ID
     * @param templateName 模板名称
     * @param templateDescription 模板描述
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTemplateFromTask(String taskId, String templateName, String templateDescription, String userId);

    /**
     * 从模板创建任务
     * 
     * @param templateId 模板ID
     * @param customData 自定义数据
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTaskFromTemplate(String templateId, Map<String, Object> customData, String userId);

    /**
     * 复制模板
     * 
     * @param templateId 模板ID
     * @param newTemplateName 新模板名称
     * @param userId 操作者ID
     * @return 复制结果
     */
    Boolean copyTemplate(String templateId, String newTemplateName, String userId);

    /**
     * 查询公共模板
     * 
     * @param userId 当前用户ID
     * @return 公共模板列表
     */
    List<TaskTemplateVO> getPublicTemplates(String userId);

    /**
     * 查询用户创建的模板
     * 
     * @param userId 用户ID
     * @return 模板列表
     */
    List<TaskTemplateVO> getUserCreatedTemplates(String userId);

    /**
     * 查询热门模板
     * 
     * @param limit 限制数量
     * @param userId 当前用户ID
     * @return 热门模板列表
     */
    List<TaskTemplateVO> getPopularTemplates(Integer limit, String userId);

    /**
     * 搜索模板
     * 
     * @param keyword 关键词
     * @param userId 当前用户ID
     * @return 模板列表
     */
    List<TaskTemplateVO> searchTemplates(String keyword, String userId);

    /**
     * 设置模板为公共模板
     * 
     * @param templateId 模板ID
     * @param isPublic 是否公共
     * @param userId 操作者ID
     * @return 设置结果
     */
    Boolean setTemplatePublic(String templateId, Boolean isPublic, String userId);
}
